/**
 * @desc 权限表
 */
import { Column, Table, Model, DataType, CreatedAt, UpdatedAt, BelongsToMany } from 'sequelize-typescript';
import { Role } from './role';
import { RoleRights } from './roleRights';
/*
常见权限:
菜单权限: 能否使用某个菜单
权限名称/权限描述/权限是否可用/菜单对应的界面地址/层级关系/权限的类型
rights_name/rights_desc/rights_state/rights_path/rights_pid/rights_type

路由权限: 能否跳转到某个界面
权限名称/权限描述/权限是否可用/当前权限对应的路由地址/层级关系/权限的类型
rights_name/rights_desc/rights_state/rights_path/rights_pid/rights_type

请求权限: 能否发送某个请求
权限名称/权限描述/权限是否可用/当前权限对应的请求地址/当前权限对应的请求类型/层级关系/权限的类型
rights_name/rights_desc/rights_state/rights_path/rights_method/rights_pid/rights_type
* */
@Table
export class Rights extends Model<Rights> {
  @Column({
    type: DataType.INTEGER,
    primaryKey: true,
    autoIncrement: true, // 自动创建
    allowNull: false, // 是否允许为空
    comment: '权限ID',
  })
  id: number;

  @Column({
    type: DataType.STRING(255),
    field: 'rights_name',
    allowNull: false, // 是否允许为空
    comment: '权限名称',
  })
  rightsName: string;

  @Column({
    type: DataType.STRING(255),
    field: 'rights_desc',
    allowNull: false, // 是否允许为空
    comment: '权限描述',
  })
  rightsDesc: string;

  @Column({
    type: DataType.BOOLEAN,
    field: 'rights_state',
    allowNull: true, // 是否允许为空
    comment: '权限是否可用',
  })
  rightsState: boolean;

  @Column({
    type: DataType.BOOLEAN,
    field: 'rights_type',
    allowNull: false, // 是否允许为空
    comment: '权限类型',
  })
  rightsType: string;

  @Column({
    type: DataType.STRING(255),
    field: 'rights_method',
    allowNull: true, // 是否允许为空
    comment: '请求权限的方法',
  })
  rightsMethod: string;

  @Column({
    type: DataType.STRING(255),
    field: 'rights_Path',
    allowNull: true, // 是否允许为空
    comment: '权限地址和路径',
  })
  rightsPath: string;

  @Column({
    type: DataType.INTEGER,
    allowNull: true, // 是否允许为空
    defaultValue: 0,
    comment: '权限的父级编号',
  })
  pid: number;

  @Column({
    type: DataType.INTEGER,
    allowNull: true, // 是否允许为空
    defaultValue: 0,
    comment: '权限等级',
  })
  level: number;

  @BelongsToMany(() => Role, () => RoleRights)
  roles:Role[];

  @CreatedAt // 设置时间戳 sets timestamps=true and createdAt='creationDate'
  createdAt: Date;

  @UpdatedAt // 设置时间戳 sets timestamps=true and updatedAt='updatedOn'
  updatedAt: Date;
}

export default () => Rights;
